﻿#pragma once
/**
@author 何炜
@date 2010/07/23
@brief .
@details
*/

namespace GLL
{
	namespace Math
	{
		///通过时间计算正弦递减曲线的偏移位置
		class SineDecline
		{
		private:
			bool _finished;
			float _timePassed;
			float _ampNow;
			float _amp;
			float _w;
			float _totalTime;
			float _t0Value;
			float _value;
			void SetT0Value(float t0Value){ _value = _t0Value = t0Value;}
			void Set(float A, float W, float T);

		public:
			/**.
			@param Vt0  t0 时刻的值
			@param A 最大幅度
			@param W 震动频率
			@param T 震动时长
			*/
			SineDecline(float Vt0, float A, float W, float T)
			{
				SetT0Value(Vt0);
				Set(A, W, T);
			}

			///是否结束了
			virtual bool IsFinished(){return _finished;}

			/**每帧更新.
			@param t 上次调用到这次调用之间流逝的时间
			@return 当前时间下的量
			*/
			float GetValue( float TimeSinceLastCall);
		};


	};
};
